﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UtilityExtensions;
using DAL;
using System.Data;
using System.IO;
using System.Configuration;
using System.Transactions;
using System.Data.Linq;
using System.ComponentModel;

namespace BOL.Ventas
{
    public    class FolioBL
    {

        public int Add(int idProyecto, int idDocumentoTipo, string  serie,int inicio, int fin,int actual,bool bitActivo)
        {
            using (TransactionScope ts = new TransactionScope())
            {

               
                //buscamos si existe otro activo
                dbGestionDataContext _db = new dbGestionDataContext(Parametros.strConnString);

                var q = from a in _db.Folios
                        where a.idProyecto == idProyecto
                        & a.idDocumentoTipo == idDocumentoTipo
                        & a.bitActivo == true
                        select a;
                // no debe existir  con las mismas caracteristicas activo
                if (q.Count() > 0)
                {
                    throw new Exception("Existe Otra serie Activa");
                }


                var folio = new Folio();

                Proyecto proyecto = _db.Proyectos.Single(p => p.idInternal == idProyecto);

                folio.AddSet(_db,
                                    proyecto.idEmpresa.Value,
                                    idDocumentoTipo,
                                    idProyecto,
                                    serie,
                                    inicio,
                                    fin.ToInt(),
                                     bitActivo);

                _db.SubmitChanges();
                ts.Complete();
                return folio.idInternal;
            }
        }

        public void Update(int idFolio,int inicio,int fin, bool bitActivo)
        {
            using (TransactionScope ts = new TransactionScope())
            {

                
                //buscamos si existe otro activo
                dbGestionDataContext _db = new dbGestionDataContext(Parametros.strConnString);


                var folio = _db.Folios.Single(p => p.idInternal == idFolio);
                folio.UpdateSet(inicio, fin, bitActivo);

                _db.SubmitChanges();
                ts.Complete();
                
            }
        }

        public IEnumerable<FolioInfo> GetFolio(int idProyecto)
        {


            var q = from a in DbUtil.Db.Folios
                    where a.idProyecto == idProyecto
                    select new FolioInfo
                    {
                        
                        documentoTipoStr = a.DocumentoTipo.descripcion,
                        fin = a.Fin,
                        idDocumentoTipo = a.idDocumentoTipo,
                        idEmpresa = a.idEmpresa,
                        idInternal = a.idInternal,
                        idProyecto = a.idProyecto,
                        inicio = a.Inicio,
                        serie = a.serie,
                        bitActivo=a.bitActivo
                    };

            return q;
        }
    }
}
